#include "PseudoColorAlgorithm.h"
#include <QRgb>
#include <QDebug>

PseudoColorAlgorithm::PseudoColorAlgorithm(QObject *parent)
    : ImageProcessingAlgorithmBase(parent),
      m_processed(false) // 初始为未处理状态
{
    // 构造函数初始化成员变量
}

PseudoColorAlgorithm::~PseudoColorAlgorithm()
{
    // 析构函数，无特殊资源需要释放
}

void PseudoColorAlgorithm::setInputImage(const QString &imageId, const QImage &inputImage)
{
    // 设置新图像时重置所有参数到默认值
    resetToDefaultParameters();
    m_imageId = imageId;
    m_inputImage = inputImage;
}

QString PseudoColorAlgorithm::currentImageId() const
{
    return m_imageId;
}

void PseudoColorAlgorithm::initialize()
{
    // 发出注册widget信号，当前算法没有专用设置界面，传入nullptr
    emit registerAlgorithmWidget(algorithmName(), nullptr, ":/icons/images/pseudoColor.png");
}

QString PseudoColorAlgorithm::algorithmName() const
{
    return QString("伪彩色转换");
}

void PseudoColorAlgorithm::processImage(const QString& parameters) {
    Q_UNUSED(parameters)
    if (m_inputImage.isNull()) {
        qWarning() << "No input image set for pseudo color processing";
        emit imageProcessed(m_imageId, QImage());
        return;
    }

    QImage inputImage = m_inputImage;
    QImage outputImage = inputImage.convertToFormat(QImage::Format_RGB32);
    int width = outputImage.width();
    int height = outputImage.height();

    for (int y = 0; y < height; ++y) {
        for (int x = 0; x < width; ++x) {
            QRgb pixel = outputImage.pixel(x, y);
            int gray = qGray(pixel); // 获取灰度值

            // 伪彩色映射（热图风格）
            int r = qMin(gray * 2, 255);
            int g = qMin((gray - 85) * 2, 255);
            int b = qMin((gray - 170) * 2, 255);
            outputImage.setPixel(x, y, qRgb(r, g, b));
        }
    }

    // 处理完成后标记为已处理
    m_processed = true;
    
    // 发送处理完成结果
    emit imageProcessed(m_imageId, outputImage);
}

QVariantMap PseudoColorAlgorithm::getProcessParameters() const
{
    QVariantMap params;
    params["algorithmName"] = algorithmName();
    params["imageId"] = m_imageId;
    params["processed"] = m_processed;
    return params;
}

void PseudoColorAlgorithm::setProcessParameters(const QVariantMap &params)
{
    // 检查并设置处理状态参数
    if (params.contains("processed")) {
        m_processed = params["processed"].toBool();
    }
}

/**
 * @brief 恢复默认参数
 * 将算法的所有参数恢复到默认设置
 */
void PseudoColorAlgorithm::resetToDefaultParameters()
{
    // 重置处理状态
    m_processed = false;
    
    // 清除设置的图像数据
    m_inputImage = QImage();
    m_imageId.clear();
    
    // 该算法没有其他参数需要重置
    qDebug() << "PseudoColorAlgorithm: Reset to default parameters and cleared image data";
}
